const Joi = require('joi');

const createForm = Joi.object({
  name: Joi.string().trim().min(1).max(200).required(),
  code: Joi.string().trim().optional().allow(''),
  description: Joi.string().trim().max(1000).allow(''),
  order: Joi.number().min(1),
  type: Joi.string().valid('form', 'template').default('form'),
  version: Joi.string().trim().optional(), // 添加版本字段
  status: Joi.string().optional(), // 添加状态字段
  projectId: Joi.string().hex().length(24).optional(), // 添加可选的项目ID
  sectionId: Joi.string().hex().length(24).optional(), // 添加可选的章节ID
  config: Joi.object({
    fields: Joi.array().items(
      Joi.object({
        id: Joi.string().required(),
        type: Joi.string().required(),
        name: Joi.string().trim().optional(), // 添加 name 字段
        order: Joi.number().min(1),
        label: Joi.string().trim(),
        required: Joi.boolean().default(false),
        visible: Joi.boolean().default(true),
        value: Joi.any(),
        validations: Joi.array().optional(), // 添加 validations 字段
        fieldConfig: Joi.object({
          validation: Joi.any(),
          display: Joi.any(),
          events: Joi.any()
        }),
        metadata: Joi.object({
          createdAt: Joi.date(),
          updatedAt: Joi.date(),
          version: Joi.number().default(1)
        })
      })
    ),
    formConfig: Joi.object({
      layout: Joi.string().valid('grid', 'flex', 'table').default('grid'),
      theme: Joi.string().valid('default', 'compact', 'detailed').default('default'),
      pageIsolation: Joi.boolean().default(false),
      pageOrientation: Joi.string().valid('portrait', 'landscape').default('portrait'),
      validation: Joi.object({
        enabled: Joi.boolean().default(true),
        rules: Joi.any()
      })
    }),
    lastUpdated: Joi.alternatives().try(
      Joi.date(),
      Joi.string().isoDate()
    ).optional() // 支持 Date 对象和 ISO 字符串
  }).optional()
});

const updateForm = createForm.fork(['name', 'code'], (schema) => schema.optional());

const updateFormConfig = Joi.object({
  fields: Joi.array().items(
    Joi.object({
      id: Joi.string().required(),
      type: Joi.string().required(),
      name: Joi.string().trim().optional(), // 添加 name 字段
      order: Joi.number().min(1),
      label: Joi.string().trim(),
      required: Joi.boolean(),
      visible: Joi.boolean(),
      value: Joi.any(),
      validations: Joi.array().optional(), // 添加 validations 字段
      fieldConfig: Joi.object({
        validation: Joi.any(),
        display: Joi.any(),
        events: Joi.any()
      })
    })
  ),
  formConfig: Joi.object({
    layout: Joi.string().valid('grid', 'flex', 'table'),
    theme: Joi.string().valid('default', 'compact', 'detailed'),
    pageIsolation: Joi.boolean(),
    pageOrientation: Joi.string().valid('portrait', 'landscape'),
    validation: Joi.object({
      enabled: Joi.boolean(),
      rules: Joi.any()
    })
  }),
  lastUpdated: Joi.date().optional() // 添加这个字段
});

const addField = Joi.object({
  id: Joi.string().required(),
  type: Joi.string().required(),
  name: Joi.string().trim().optional(), // 添加 name 字段
  order: Joi.number().min(1),
  label: Joi.string().trim(),
  required: Joi.boolean().default(false),
  visible: Joi.boolean().default(true),
  value: Joi.any(),
  validations: Joi.array().optional(), // 添加 validations 字段
  fieldConfig: Joi.object({
    validation: Joi.any(),
    display: Joi.any(),
    events: Joi.any()
  })
});

const updateField = addField.fork(['id', 'type'], (schema) => schema.optional());

module.exports = {
  createForm,
  updateForm,
  updateFormConfig,
  addField,
  updateField
};